#ifndef NE_CROSS_PLATFORM_SDK_V2_NIM_AI_SERVICE_HPP
#define NE_CROSS_PLATFORM_SDK_V2_NIM_AI_SERVICE_HPP
#include "v2_nim_internal.hpp"
namespace v2 {

/// @brief AI 数字人服务
/// @pre
/// 调用 `V2NIMClient::get()` 拿到 client 实例
/// 调用 `client.getAIService()` 拿到 aiService 实例
/// @par 示例代码
/// @code
/// auto& client = V2NIMClient::get();
/// auto& aiService = client.getAIService();
/// @endcode
class V2NIMAIService {
public:
    /// @brief 获取 AI 数字人列表
    /// @param success 成功回调
    /// @param failure 失败回调
    /// @return void
    /// @par 示例代码
    /// @code
    /// aiService.getAIUserList(
    ///     [](nstd::vector<nstd::shared_ptr<V2NIMAIUser>> result) {
    ///         // get AI users success
    ///     },
    ///     [](V2NIMError error) {
    ///         // get AI users failed, handle error
    ///     });
    /// @endcode
    virtual void getAIUserList(V2NIMSuccessCallback<nstd::vector<nstd::shared_ptr<V2NIMAIUser>>> success, V2NIMFailureCallback failure) = 0;
    /// @brief AI 数字人请求代理接口
    /// @param params 接口入参
    /// @param success 成功回调
    /// @param failure 失败回调
    /// @return void
    /// @par 示例代码
    /// @code
    /// V2NIMProxyAIModelCallParams params;
    /// aiService.proxyAIModelCall(
    ///     params,
    ///     []() {
    ///         // update success
    ///     },
    ///     [](V2NIMError error) {A
    ///         // update failed, handle error
    ///     });
    /// @endcode
    virtual void proxyAIModelCall(V2NIMProxyAIModelCallParams params, V2NIMSuccessCallback<void> success, V2NIMFailureCallback failure) = 0;
    /// @brief 添加 AI 模块的监听器
    /// @param listener 监听器
    /// @return void
    /// @par 示例代码
    /// @code
    /// V2NIMAIListener listener;
    /// aiService.addAIListener(listener);
    /// @endcode
    virtual void addAIListener(V2NIMAIListener listener) = 0;
    /// @brief 移除 AI 模块的状态监听器
    /// @param listener 监听器
    /// @return void
    /// @par 示例代码
    /// @code
    /// V2NIMAIListener listener;
    /// aiService.removeAIListener(listener);
    /// @endcode
    virtual void removeAIListener(V2NIMAIListener listener) = 0;
};

}  // namespace v2

#endif  // NE_CROSS_PLATFORM_SDK_V2_NIM_AI_SERVICE_HPP
